package com.design.strategy.template.course;

/**
 * 抽象模板方法
 */
public abstract class AbstarctCourse {

    public final void createCourse() {
        // 1、发布预习子类
        postPreResource();
        // 2、制作课程
        createPPT();
        // 3、直播授权
        liveVide();
        // 4、上传课后子类
        postResource();
        // 5、布置作业
        postHomeWork();

        if (needCheckHomeWork()) {
            checkHomeWork();
        }
    }

    protected abstract void checkHomeWork();

    /**
     * 定义一个钩子方法
     * @return
     */
    public boolean needCheckHomeWork() {
        return false;
    }

    protected void postHomeWork() {
        System.out.println("发布预习子类");
    }

    protected void postResource() {
        System.out.println("制作课程");
    }

    protected void createPPT() {
        System.out.println("直播授权");
    }

    protected void liveVide() {
        System.out.println("上传课后子类");
    }

    protected void postPreResource() {
        System.out.println("布置作业");
    }
}
